package com.woniu.service;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.woniu.commons.exception.YogaException;
import com.woniu.model.dto.CoachDto;
import com.woniu.model.dto.CoachPageDto;
import com.woniu.model.entity.YCoach;
import com.woniu.model.param.*;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author 胡歌
 * @since 2024年05月22日
 */
public interface YCoachService extends IService<YCoach> {

    /**
     *
     * @param mobile 用户注册手机号
     */
    void sendRegisterCode(String mobile);
    /**
     *
     * @param param 验证码验证 并传入教练需要注册的参数
     * @throws Exception
     */
    void CodeCoachRegister(CodeCoachRegisterParam param)throws Exception;
    /**
     *
     * @param mobile 手机号登录 发送验证码需要的手机号
     * @throws Exception 可能手机号未注册抛出异常
     */
    void LoginCodePhone(String mobile)throws Exception;
    /**
     *
     * @param param 教练手机号验证码登录
     * @return 返回登录成功教练对象
     * @throws Exception 可能验证码错误抛出异常
     */
    CoachDto codeLogin(CoachCodeLoginParam param)throws Exception;
    /**
     *
     * @param param 教练账号和密码登录
     * @return 返回整个教练对象
     * @throws Exception 在教练登录中，密码或者账号出现问题抛出异常
     */
    CoachDto coachLogin(coachLoginParam param)throws Exception;
    /**
     *
     * @param param 教练修改自己的头像 传入头像地址
     */
    void updateImage(UpdateCoachImageParam param);
    /**
     *
     * @param param 教练修改自己的昵称
     * @return 返回修改后的昵称
     */
    YCoach updateMessage(UpdateMessageParam param);
    /**
     *
     * @param param 教练修改自己的登录密码 传入之前的旧密码 在修改之后的新密码，新旧密码不能重复
     * @throws Exception 当新旧密码重复是抛出异常
     */
    void UpdateCoachPassword( UpdateCoachPasswordParam param)throws Exception;
    /**
     *
     * @param param 教练修改自己的状态0注销 1可预约 2授课中
     * @return
     */
    YCoach updateCoach(AdminUpdateCoachStateParam param);
    /**
     *
     * @param param 修改教练的状态0注销 1可预约 2授课中
     * @return
     */
    YCoach updateCoachState(UpdateCoachStateParam param);
    /**
     *
     * @param param 教练修改自己教练种类类型
     * @return
     */
    YCoach updateCoachTypeId(updateCoachTypeIdParam param);
    /**
     *
     * @param mobile 教练修改自己的手机号，给旧手机号发送验证码
     */
    void UpdateCoachPhone(String mobile);
    /**
     *
     * @param param 教练修改自己的手机号 传入旧手机号和发送的验证码 验证通过传入新手机号
     * @throws Exception 异常处理，当传入的验证码不匹配，或者输入的手机号不是之前绑定的手机号抛出异常
     */
    void codeUpdate(CodeCoachUpdateParam param)throws Exception;

    /*
 分页查询教练数量
  */
    Page<CoachPageDto> loadPageCoach(LoadPageCoachParam param) throws YogaException;

    YCoach findCoachInfo(Integer coachId);

    YCoach loadCoachByToken(Integer coachId);

    /**
     * 完善教练端的其他信息
     * @param param
     * @return
     * @throws YogaException
     */
    public void updateCoachBase(UpdateCoachBaseParam param)throws YogaException;
}
